<h2 id="-">创建游戏</h2>
<p>在开始使用 gameServer 之前，你需要创建自己的游戏。如何创建游戏详见 <a href="%E6%96%B0%E6%89%8B%E4%B8%8A%E8%B7%AF-Matchvs%5BMatchvsStart%5D.md">Matchvs快速入门</a>。</p>
<h2 id="-gameserver">创建 gameServer</h2>
<p>成功创建游戏后，点击左侧菜单栏 “gameServer” 即可进入 gameServer 列表页。</p>
<p><img src="gameServerimg/init.png" alt=""></p>
<p>Matchvs 使用 git 管理 gameServer，所以在创建 gameServer 之前，你需要将自己的 SSH key 上传至 Matchvs 账号。</p>
<ol>
<li><p>复制 SSH key 到粘贴板</p>
<p>SSH key 文件通常位于 <code>~/.ssh/id_rsa.pub</code>。如果文件不存在，请参阅 git 手册生成 SSH key。</p>
</li>
<li><p>点击上图中的 “立即上传”</p>
<p><img src="gameServerimg/uploadsshkey.png" alt=""></p>
<p>把第1步复制的内容粘贴到输入框，注意不要输入多余的空格或空行，点击确定。</p>
</li>
<li><p>确定上传成功</p>
<p><img src="gameServerimg/uploadsshkeysuccess.png" alt=""></p>
</li>
</ol>
<p>SSH key 上传成功后，点击 “创建gameServer”，填写 gameServer 基本信息：</p>
<p><img src="gameServerimg/creategameserver.png" alt=""></p>
<p>创建成功后的 gameServer 相关信息展示：</p>
<p><img src="gameServerimg/creategameserversuccess.png" alt=""></p>
<p>gameServer 创建成功后，Matchvs 会为每个 gameServer 分配一个唯一的 git 仓库地址。在本示例中，Matchvs 分配的 git 仓库地址为： <code>ssh://git@git.matchvs.com:3879/1424769556baec5362f5b1513f7e1167.git</code>。下一小节将介绍如何使用 git 仓库。</p>
<h2 id="-gameserver-">下载 gameServer 框架代码</h2>
<p>拿到 git 仓库地址后，使用 git 命令将 gameServer 仓库克隆到本地：</p>
<pre><code class="language-shell">$ git clone ssh://git@git.matchvs.com:3879/1424769556baec5362f5b1513f7e1167.git myGameServer
Cloning into &#39;myGameServer&#39;...
warning: You appear to have cloned an empty repository.</code></pre>
<p>因为这是一个新的 git 仓库，所以在克隆成功后 git 工具会发出一条警告，忽略该警告信息即可。</p>
<p>前往<a href="http://www.matchvs.com/serviceDownload">下载中心</a>，下载 Node.js 版本的 gameServer 框架（框架版本可能有更新，以官网展示为准）:</p>
<p><img src="gameServerimg/nodegameserver.png" alt=""></p>
<p>下载完成并解压，将解压后的所有文件复制到 <code>myGameServer</code>目录下，这时的文件结构如下所示：</p>
<pre><code class="language-shell">myGameServer
├── .gitignore
├── Dockerfile
├── Makefile
├── README.md
├── conf
│   └── config.json
├── gsmeta
├── main.js
├── package.json
└── src
    └── app.js</code></pre>
<p>请保证目录结构完整，否则可能出现 gameServer 无法发布的情况。</p>
<h2 id="-">本地开发环境</h2>
<p><a href="https://nodejs.org">Node.js</a> gameServer 支持 Node.js 8.0 及以上版本。</p>
<h2 id="-">本地开发调试</h2>
<p>gameServer 配置文件路径为<code>myGameServer/conf/config.json</code>，其中包含以下默认配置项：</p>
<ul>
<li><p><strong>addr</strong>：gameServer服务监听地址。IP默认为 “0.0.0.0” 即可，不建议修改。端口号可以从官网查询到：</p>
<p><img src="gameServerimg/gameserverdetail.png" alt=""></p>
<p>该端口号由系统在创建 gameServer 时分配以保证全局唯一性。</p>
<p><strong>gameServer 只能使用系统分配的端口号，否则发布上线后将无法正常提供服务。</strong></p>
</li>
<li><p><strong>logLevel</strong>：日志配置。gameServer 使用 <a href="https://www.npmjs.com/package/log4js">log4js</a> 作为日志管理框架，如需自定义 log 输出可在了解 log4js 的前提下自行修改配置文件。</p>
</li>
<li><p><strong>register</strong>：独立部署配置，仅在使用 Matchvs 独立部署解决方案时开启。</p>
<ul>
<li>enable：register 注册服务控制开关，设为 true 时开启独立部署模式，设为 false 时关闭独立部署模式。</li>
<li>gameID：开发者自定义游戏ID。</li>
<li>svcName：gameServer 服务名，与 podName 组合作为该 gameServer 的唯一标识。 </li>
<li>podName：gameServer 实例名，与 svcName 组合作为该 gameServer 的唯一标识。</li>
<li>remoteHost：gameServer 注册服务地址，由独立部署方案提供。</li>
<li>remotePort：gameServer 注册服务端口，由独立部署方案提供。</li>
<li>localHost：gameServer 对外服务地址，该地址需要能被独立部署的引擎服务访问。</li>
<li>localPort：gameServer 对外服务端口。</li>
</ul>
</li>
<li><p><strong>roomConf</strong>：gameServer 支持房间管理功能，开发者通过在 gameServer 里调用 API 接口可以实现房间创建、设置房间存活时常和房间删除等操作。如需在本地调试时使用房间管理功能，则需要开启 roomConf 配置。</p>
<ul>
<li>enable：房间管理服务控制开关，设为 true 时开启房间管理服务，设为 false 时关闭房间管理服务。</li>
<li>svcName：gameServer 服务名，开启<code>matchvs debug</code>时在终端显示，与 podName 组合作为该 gameServer 的唯一标识。</li>
<li>podName：gameServer 实例名，开启<code>matchvs debug</code>时在终端显示，与 svcName 组合作为该 gameServer 的唯一标识。</li>
<li>remoteHost：gameServer 房间管理服务地址，开启<code>matchvs debug</code>时在终端显示。</li>
<li>remotePort：gameServer  房间管理服务端口，开启<code>matchvs debug</code>时在终端显示。</li>
</ul>
</li>
</ul>
<p>为了方便开发者在开发过程中快速调试和定位问题，matchvs 命令行工具提供了本地调试命令<code>matchvs debug &lt;GS_key&gt;</code>。使用时只需把 <GS_key> 替换为需要开启本地调试的 gameServer 的 GS_key，然后执行命令即可开启本地调试。例如：</p>
<pre><code class="language-shell">$ matchvs debug 1424769556baec5362f5b1513f7e1167
    ==================== Develop config ====================
    SvcName:        svc-201994-0
    PodName:        deploy-201994-0-5f5d8785f8-9545j
    RemoteHost:     directory10.matchvs.com
    RemotePort:     9982</code></pre>
<p>开启本地调试模式后，启动本地 gameServer 服务：</p>
<pre><code class="language-shell">$ cd myGameServer
$ npm install
$ node main.js</code></pre>
<p>本地搭建项目时，<code>npm install</code>失败或进度慢,可尝试使用<code>cnpm install</code>。</p>
<p><code>npm install</code>和<code>cnpm install</code>混用时报错,建议删除<code>node_modules</code>, 重新使用一种方式安装。</p>
<p>如果想要退出调试，在Matchvs命令行终端输入<code>quit</code>回车即可。</p>
<h2 id="demo-gameserver-">Demo 客户端与 gameServer 建立连接</h2>
<p>本地调试模式只支持测试环境，所以 Demo 客户端需要切换到测试环境，即 Demo 配置文件中的 <code>channel</code>需要修改为 <code>Matchvs</code>，<code>platform</code>需要修改为<code>alpha</code>。</p>
<p>运行Demo客户端，此时Matchvs 引擎就会将客户端的请求转发到开发者本地 gameServer 服务，开发者无须提交代码即可在本地调试代码。</p>
<h2 id="-">查看日志</h2>
<p>gameServer 运行日志会输出到终端：</p>
<pre><code class="language-shell">$ node main.js
[2018-09-10T18:43:26.012] [INFO] default - Game server started, listen on: 0.0.0.0:30381
[2018-09-10T18:47:40.370] [DEBUG] default - onCreateRoom: { userID: 0,
  gameID: 201994,
  roomID: &#39;1679176138263367775&#39;,
  createExtInfo:
   { userID: 324973,
     userProfile: Uint8Array [ 117, 115, 101, 114, 80, 114, 111, 102, 105, 108, 101 ],
     roomID: &#39;1679176138263367775&#39;,
     state: 1,
     maxPlayer: 3,
     mode: 0,
     canWatch: 0,
     roomProperty: Uint8Array [  ],
     createFlag: 1,
     createTime: &#39;1536576460&#39; } }</code></pre>
<link href="http://cdn.bootcss.com/highlight.js/8.0/styles/rainbow.min.css" rel="stylesheet">
<script src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>